/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.weed.net;

import com.weed.core.WeedException;
import java.util.HashMap;

/**
 * 使用本模式可以达到统一的API，不同的传输协议，使用传输入方式可以通过配置的方式来实现，达到在</p>
 * 不改变源代码的情况下，转换到其队协议上。如果你需要扩展到不同的协议上，请实现<code>IRequest</code>接口</p>
 * 您可以参考<code>HttpURLRequest</code>实现，这个实现使用http协议来传输对象,并且成功实现了传输的压缩。
 * @author Jason
 */
public class SourceFactory {
    /**静态变量*/
    public final static String REQUEST_INTERFACE_IMPL = "REQUEST_INTERFACE_IMPL";
    public final static String SOURCE_INTERFACE_IMPL = "SOURCE_INTERFACE_IMPL";

    static SourceFactory sourceFactory = null;
    
    
    
    /**
     * 构造函数1.
     */
    private SourceFactory(){}
    
    public static SourceFactory getInstance(){
        if(sourceFactory == null){
            sourceFactory = new SourceFactory();
        }
        return sourceFactory;
    }
    /**
     * 获得一个全新的数据源。
     * @param config
     * @return
     * @throws WeedException
     */
    public ISource buildSource(HashMap config) throws WeedException{
        ISource source= null;
        try{
            String source_impl = (String) config.get(SourceFactory.SOURCE_INTERFACE_IMPL);
            if(source_impl == null)
                source_impl = "com.weed.net.DefaultSource";
            Class sourceClass = Class.forName(source_impl);
            source = (ISource) sourceClass.newInstance();//实例化。
            source.init(this, config);
        }catch(Exception ex){ 
            throw new WeedException(ex);
        }
        return source;
    }
    

}
